package com.minis.beans.factory.config;

import java.util.*;

public class ConstructorArgumentValues {
    private final Map<Integer, ConstructorArgumentValue> indexedArgumentValues = new HashMap<>(0);
    private final List<ConstructorArgumentValue> genericArgumentValues = new LinkedList<>();
    public ConstructorArgumentValues() {
    }

    private void addArgumentValue(Integer key, ConstructorArgumentValue newValue) {
        this.indexedArgumentValues.put(key, newValue);
    }

    public boolean hasIndexedArgumentValue(int index) {
        return this.indexedArgumentValues.containsKey(index);
    }

    public ConstructorArgumentValue getIndexedArgumentValue(int index) {
        return this.genericArgumentValues.get(index);
    }

    public void addGenericArgumentValue(Object value, String type) {
        this.genericArgumentValues.add(new ConstructorArgumentValue(value, type));
    }

    public void addGenericArgumentValue(ConstructorArgumentValue newValue) {
        if(newValue.getName() != null) {
            for(Iterator<ConstructorArgumentValue> it = this.genericArgumentValues.iterator(); it.hasNext();) {
                ConstructorArgumentValue currentValue = it.next();
                if(newValue.getName().equals(currentValue.getName())) {
                    it.remove();
                }
            }
        }

        this.genericArgumentValues.add(newValue);
    }

    public ConstructorArgumentValue getGerenicArgumentValue(String requiredName) {
        for(ConstructorArgumentValue value : this.genericArgumentValues) {
            if(value.getName()!= null && (!value.getName().equals(requiredName))) {
                continue;
            }
            return value;
        }
        return null;
    }

    public int getArgumentCount() {
        return this.genericArgumentValues.size();
    }

    public boolean isEmpty() {
        return this.genericArgumentValues.isEmpty();
    }




}
